package cn.tedu.csmall.stock.webapi.quartz;

import cn.tedu.csmall.commons.pojo.stock.entity.Stock;
import cn.tedu.csmall.stock.webapi.quartz.config.RabbitMQConfig;
import cn.tedu.csmall.stock.webapi.utils.RedisBloomUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.math.RandomUtils;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;

import java.time.LocalDateTime;

@Slf4j
public class QuartzJob implements Job {

    // 装配框架提供的操作RabbitMQ的对象
    @Autowired
    private RabbitTemplate rabbitTemplate;

    // 装配操作布隆过滤器的对象
    @Autowired
    private RedisBloomUtils redisBloomUtils;
    // 这个方法就是当前job要定时执行的任务方法
    static int x=1;
    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        // 因为当前是简单演示功能,所以就输出一个当前时间即可
        log.info("-----------------"+ LocalDateTime.now() +"-------------------");
        // 定义一个数组,这里使用字符串值做元素,保存到布隆过滤器中
        String[] colors={"red","origin","yellow","green","blue","while","pink"};
        final String COLOR_BLOOM="color_bloom";
        // 下面代码实现将数组元素保存到布隆过滤器
        redisBloomUtils.bfmadd(COLOR_BLOOM,colors);
        // 我们使用的redisBloomUtils是包含操作布隆过滤器脚本的类,需要时直接复制使用就可以
        // 这个对象创建的布隆过滤器默认情况下是100个元素是误判率1%,如果需要修改,可以调用它的api
        // 声明一个元素
        String el="blue";
        // 判断是否在布隆过滤器中
        System.out.println(el+"是否在colors数组中:"+
                redisBloomUtils.bfexists(COLOR_BLOOM,el));


//        //System.out.println(x++);
//        // 实例化一个Stock对象用于发送
//        Stock stock=new Stock();
//        stock.setId(x++);
//        stock.setCommodityCode("PC100");
//        stock.setReduceCount(1+ RandomUtils.nextInt(20));
//        // 下面开始编写发送操作
//        rabbitTemplate.convertAndSend(
//                RabbitMQConfig.STOCK_EX,
//                RabbitMQConfig.STOCK_ROUT,
//                stock);
//        String number="123";
//        log.info("发送消息完成:{}",stock);
    }
}
